package com.xxx.delayqueue.controller;

import com.xxx.delayqueue.component.DelaySender;
import com.xxx.delayqueue.pojo.Msg;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * rabbitMQ实现延时队列
 * 实现原理：给消息设置存活时间（TTL），超时后会转发到死信路由中（DLX），消费端起一个监听器，监听死信路由中的消息，如果有则取出消费。
 */
@RestController
public class DelayController {

	@Autowired
	private DelaySender delaySender;

	/**
	 * 延时队列发送(给单条消息设置过期时间)
	 * http://localhost:8080/sendMsgDelay
	 */
	@RequestMapping(value = "/sendMsgDelay")
	public Msg sendMsgDelay() {
		Msg msg = new Msg();
		msg.setId(1);
		msg.setContent("msg1");
		msg.setTtl(10*1000); // 延时10s
		delaySender.sendDelayMsg(msg);
		return msg;

	}

	/**
	 * 延时队列发送(整个队列设置过期时间，与单条msg的ttl没有关系)
	 * http://localhost:8080/sendQueueDelay
	 */
	@RequestMapping(value = "/sendQueueDelay")
	public Msg sendQueueDelay() {
		Msg msg = new Msg();
		msg.setId(2);
		msg.setContent("msg2");
		msg.setTtl(20*1000); // 延时20s（不起作用，因为该消息所在的queue的延时时间为3s，在RabbitConfig.delayQueue4Queue()方法里设置的）
		delaySender.sendDelayQueue(msg);
		return msg;

	}

}
